SHELL = /bin/sh
NULLCMD = :

#### Start of system configuration section. ####

srcdir = @srcdir@
VPATH = $(srcdir):$(srcdir)/missing

CC = @CC@
YACC = @YACC@
PURIFY =
AUTOCONF = autoconf
@SET_MAKE@
MKFILES = @MAKEFILES@

prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libdir = @libdir@
libexecdir = @libexecdir@
datarootdir = @datarootdir@
datadir = @datadir@
arch = @arch@
sitearch = @sitearch@
sitedir = @sitedir@

TESTUI = console
TESTS =
RDOCTARGET = @RDOCTARGET@

EXTOUT = @EXTOUT@
RIDATADIR = $(DESTDIR)$(datadir)/ri/$(MAJOR).$(MINOR)/system

empty =
OUTFLAG = @OUTFLAG@$(empty)
CFLAGS = @CFLAGS@ @XCFLAGS@ @ARCH_FLAG@
cflags = @cflags@
optflags = @optflags@
debugflags = @debugflags@
CPPFLAGS = -I. -I$(srcdir) @CPPFLAGS@
LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
EXTLDFLAGS = 
XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)
EXTLIBS = 
LIBS = -lmui @LIBS@ $(EXTLIBS)
MISSING = @LIBOBJS@ @ALLOCA@
LDSHARED = @LIBRUBY_LDSHARED@
DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS) @ARCH_FLAG@
SOLIBS = @SOLIBS@
MAINLIBS = @MAINLIBS@
MINIOBJS = @MINIOBJS@

RUBY_INSTALL_NAME=@RUBY_INSTALL_NAME@
RUBY_SO_NAME=@RUBY_SO_NAME@
EXEEXT = @EXEEXT@
PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
RUBY = $(RUBY_INSTALL_NAME)
MINIRUBY = @MINIRUBY@ $(MINIRUBYOPT)
RUNRUBY = @RUNRUBY@ $(RUNRUBYOPT) --

#### End of system configuration section. ####

MAJOR=	@MAJOR@
MINOR=	@MINOR@
TEENY=	@TEENY@

LIBRUBY_A     = @LIBRUBY_A@
LIBRUBY_SO    = @LIBRUBY_SO@
LIBRUBY_ALIASES= @LIBRUBY_ALIASES@
LIBRUBY	      = @LIBRUBY@
LIBRUBYARG    = @LIBRUBYARG@
LIBRUBYARG_STATIC = @LIBRUBYARG_STATIC@
LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@

PREP          = @PREP@
ARCHFILE      = @ARCHFILE@
SETUP         =
EXTSTATIC     = @EXTSTATIC@

RM            = rm -f
NM            = @NM@
AR            = @AR@
ARFLAGS       = rcu
RANLIB        = @RANLIB@
AS            = @AS@
ASFLAGS       = @ASFLAGS@

OBJEXT        = @OBJEXT@
MANTYPE	      = @MANTYPE@

INSTALLED_LIST= .installed.list
#### End of variables

all:

.DEFAULT: all

# Prevent GNU make v3 from overflowing arg limit on SysV.
.NOEXPORT:

miniruby$(EXEEXT):
		@$(RM) $@
		$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(MINIOBJS) $(LIBRUBY_A) $(LIBS) $(OUTFLAG)$@

$(PROGRAM):
		@$(RM) $@
		$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) $(OUTFLAG)$@

# We must `rm' the library each time this rule is invoked because "updating" a
# MAB library on Apple/NeXT (see --enable-fat-binary in configure) is not
# supported.
$(LIBRUBY_A):
		@$(RM) $@
		$(AR) $(ARFLAGS) $@ $(OBJS) $(DMYEXT)
		@-$(RANLIB) $@ 2> /dev/null || true

$(LIBRUBY_SO):
		@-$(PRE_LIBRUBY_UPDATE)
		$(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(OUTFLAG)$@
		@-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \
						  File.symlink "$(LIBRUBY_SO)", link}' \
				$(LIBRUBY_ALIASES) || true

fake.rb:	Makefile
		@echo ' \
		class Object; \
		  CROSS_COMPILING = RUBY_PLATFORM; \
		  remove_const :RUBY_PLATFORM; \
		  remove_const :RUBY_VERSION; \
		  RUBY_PLATFORM = "@arch@"; \
		  RUBY_VERSION = "@MAJOR@.@MINOR@.@TEENY@"; \
		end; \
		if RUBY_PLATFORM =~ /mswin|bccwin|mingw/; \
		  class File; \
		    remove_const :ALT_SEPARATOR; \
		    ALT_SEPARATOR = "\\\\"; \
		  end; \
		end; \
		prehook = proc do |e|; \
		  builddir = File.expand_path(File.dirname(__FILE__)); \
		  Config::MAKEFILE_CONFIG["top_srcdir"] = $$top_srcdir = \
		    File.expand_path("@top_srcdir@", builddir) unless e; \
		  untrace_var(:$$extmk, prehook); \
		end; \
		trace_var(:$$extmk, prehook); \
		' > $@

Makefile:	$(srcdir)/Makefile.in

$(MKFILES): config.status $(srcdir)/common.mk
		MAKE=$(MAKE) $(SHELL) ./config.status
		@{ \
		    echo "all:; -@rm -f conftest.mk"; \
		    echo "conftest.mk: .force; @echo AUTO_REMAKE"; \
		    echo ".force:"; \
		} > conftest.mk || exit 1; \
		$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
		{ echo "Makefile updated, restart."; exit 1; }

config.status:	$(srcdir)/configure
		MINIRUBY="$(MINIRUBY)" $(SHELL) ./config.status --recheck

$(srcdir)/configure: $(srcdir)/configure.in
		cd $(srcdir) && $(AUTOCONF)

lex.c: keywords
	( gperf -C -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? > $@.tmp && mv $@.tmp $@ ) || \
	if test -f $@; then \
	  touch $@ && echo $@ touched.; \
	else \
	  cp $(srcdir)/lex.c $@ && echo $@ copied.; \
	fi

.y.c:
	$(YACC) $<
	sed '/^#/s|y\.tab\.c|$@|' y.tab.c > $@
	rm -f y.tab.c

.c.@OBJEXT@:
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<

.s.@OBJEXT@:
	$(AS) $(ASFLAGS) -o $@ $<

clean-local::
	@$(RM) ext/extinit.c ext/extinit.$(OBJEXT)

distclean-local::
	@$(RM) ext/config.cache $(RBCONFIG)

ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP)
	$(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ -c ext/extinit.c

update-rubyspec: 
	if [ -d $(srcdir)/rubyspec ]; then \
	  cd $(srcdir)/rubyspec/mspec; \
	  git pull; \
	  cd ../spec; \
	  git pull; \
	else \
	  mkdir $(srcdir)/rubyspec; \
	  git clone $(MSPEC_GIT_URL) $(srcdir)/rubyspec/mspec; \
	  git clone $(RUBYSPEC_GIT_URL) $(srcdir)/rubyspec/spec; \
	fi

test-rubyspec:
	@if [ ! -d $(srcdir)/rubyspec ]; then echo No rubyspec here.  make update-rubyspec first.; exit 1; fi
	RUBY_EXE="$(RUNRUBY)" $(RUNRUBY) $(srcdir)/rubyspec/mspec/bin/mspec-run --background --prefix $(srcdir)/rubyspec/spec -B $(srcdir)/rubyspec/spec/ruby.$(MAJOR).$(MINOR).mspec
